import "package:get/get.dart";
import 'package:pull_to_refresh/pull_to_refresh.dart';

import '../../../../apis/maintenance.dart';
import '../../../../components/status/toast.dart';
import '../../../../controller/gather_ctrl.dart';
import '../../../../controller/network/bridge.dart';
import '../../../../controller/network/network_ctrl.dart';
import '../../../../model/bean/todo_bean.dart';
import '../../../../router/router.dart';

class ToDayTodoCtrl extends GatherCtrl {
  // 标记组件是否处于激活状态
  final isActivateStatus = false.obs;

  // 查看网络状态
  final _nc = Get.find<NetworkCtrl>();

  // 选项卡（选中状态）
  final status = 0.obs;

  // 请求参数
  final Map<String, dynamic> params = {
    "status": 0,
    "page": 1,
    "rows": 20,
  }.obs;

  //申明上拉加载更多的状态
  final refreshController = RefreshController().obs;
  final flags = true.obs;

  // 组件是否初始化完成
  RxBool isInitComplete = false.obs;

  // 数据列表
  final listData = <TodoBean>[].obs;
  final total = 0.obs;

  @override
  void onInit() {
    // 创建网络变化观察
    Bridget.createNetworkCtrl(this);

    // 标记组件为激活状态
    isActivateStatus.value = true;

    // 读取今日待办
    readTodyTodo();
  }

  @override
  void onClose() {
    // 移除观察
    Bridget.delNetworkCtrl(this);
  }

  @override
  void modify() {
    // 网络恢复正常时执行当前函数
    if (_nc.networkStatus.value && isActivateStatus.value)
      readTodyTodo(isToast: true);
  }

  /// 读取今日待办列表
  /// * [isToast] bool|是否展示动画框|选填|默认值：false
  /// * [isReset] bool|是否清空数据|选填|默认值：false
  void readTodyTodo({bool isToast = false, bool isReset = false}) async {
    //print("今日待办被请求了");
    //print("请求的条件：${params}");
    // 开启轻提示
    if (isToast) Toast.loading(title: '正在读取');

    // 获取消息列表
    TodoListBean result = await Maintenance.queryTodayToDo(params);

    // 是否重置数据
    if (isReset) listData.clear();

    // 赋值
    if (result != null && result.list != null) {
      listData.addAll(result.list.obs);
      total.value = result.total;

      // 累加页码
      if (result.list.length > 0 && listData.value.length > 0) {
        params["page"] = params["page"] + 1;
      }

      // 没有更多数据了
//      print(
//          "总长度：${result.total},渲染的数据：${listData.length},结果：${listData.length >= total.value}");
      if (listData.length >= total.value) {
        refreshController.value.loadNoData();
        flags.value = false;
      }
    }

    // 完成加载更多通知
    refreshController.value.loadComplete();

    // 开启轻提示
    if (isToast) Toast.closeToast();

    // 标记页面加载状态（初始化）
    if (!isInitComplete.value) isInitComplete.value = true;
  }

  /// 选项卡发送变化触发
  /// * [value] bool 被选中的选项卡|必填
  /// MaintenanceStatus value
  void onChangeSelectStatus(int value) {
    // 修改选中状态
    status.value = value;

    // 修改请求参数
    flags.value = true;
    params["status"] = status.value;
    params["page"] = 1;

    // 读取今日待办列表
    readTodyTodo(isToast: true, isReset: true);
  }

  /// 离开当前页面，记录返回动作
  /// * [id] String|被选中数据的id|必填
  void onLeave(String id) {
    // 标记组件为非激活状态
    isActivateStatus.value = false;

    Get.toNamed(
      AppRoutes.TodoDetails,
      arguments: {"id": id},
    ).then((value) {
      // 标记组件为激活状态
      isActivateStatus.value = true;

      if (value != null) {
        params["page"] = 1;
        readTodyTodo(isToast: true, isReset: true);
      }
    });
  }

  /// 上拉加载更多
  void onLoading() {
    if (flags.value) {
      readTodyTodo();
    } else {
      refreshController.value.loadNoData();
    }
  }
}
